﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Espam.Idiomas.Decimo.Tesis.Negocio;
using System.Drawing;
using Espam.Idiomas.Decimo.Tesis.Web.WebServiceEspam;
using System.Data;
using Espam.Idiomas.Decimo.Tesis.Web;
using System.Speech.Recognition;
using System.Speech.Synthesis;
using System.IO;


namespace Espam.Idiomas.Decimo.Tesis.Web
{
    public partial class UI_Login : System.Web.UI.Page
    {
       //SpeechRecognitionEngine reconocedor = new SpeechRecognitionEngine();
        
        //string speech;

        string validador="";
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Response.Cache.SetCacheability(HttpCacheability.ServerAndNoCache);
                Response.Cache.SetAllowResponseInBrowserHistory(false);
                Response.Cache.SetNoStore();
                CargarDdl();
                if (Session["userEspamIdiomasVarSession001"] != null)
                {
                    if (Request.QueryString["validaSession"] != null)
                    {
                        validador = Request.QueryString["validaSession"];
                        if (validador == "NoPermitido")
                        {
                            lblValidaLogin.Text = "No Tienes Permisos de Administrador";
                            ActivaError();
                            //DivError.Visible = true;
                        }
                    }
                    else if (Session["userEspamIdiomasVarSession001"] != null && Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                    {
                        Response.Redirect("Default.aspx");
                    }
                }
                else if (Session["userEspamIdiomasVarSession001"] == null || Session["rolEspamIdiomasVarSession003"] == null)
                {
                    if (Request.QueryString["validaSession"] != null)
                    {
                        validador = Request.QueryString["validaSession"];
                        if (validador == "NoHaIniciadoSession")
                        {
                            lblValidaLogin.Text = "DEBER INICIAR SESSION";
                            ActivaError();
                        }
                    }                  
                }
            }
            else
            {

            }
        }
        //private void CargarGramaticas()
        //{
        //    reconocedor.LoadGrammarAsync(new Grammar(new GrammarBuilder(new Choices(File.ReadAllLines("ComandosDefecto")))));
        //    //reconocedor.LoadGrammarAsync(new DictationGrammar());
        //    reconocedor.RequestRecognizerUpdate();
        //    reconocedor.SpeechRecognized += reconocedor_SpeechRecognized;
        //    reconocedor.SetInputToDefaultAudioDevice();
        //    reconocedor.RecognizeAsync(RecognizeMode.Multiple);

        //}

        //void reconocedor_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        //{
        //    speech = e.Result.Text;
        //    switch (speech)
        //    {
        //        case "Buenos dias jarvis":
        //            AVJarvis.Speak("Buenos dias Administrador");
        //            break;
        //        default:
        //            break;
        //    }
        //}

        private void CargarDdl()
        {
            List<Usuarios> lista = new List<Usuarios>();
            Usuarios oUsu = new Usuarios();
            lista = oUsu.GetListaRoles();
            lista.Insert(0,new Usuarios(){idRol=0, rol="<elige un tipo de usuario>"});
            ddlTipoUsuario.DataSource = lista;
            ddlTipoUsuario.DataTextField = "rol";
            ddlTipoUsuario.DataValueField = "idRol";
            ddlTipoUsuario.DataBind();
        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            //string mensajeuno = "Estimados estudiantes de primer semestre nos se les permitirá inscribirse a los módulos de inglés hasta que se encuentre en segundo semestre por cuestiones administrativas";
            List<Usuarios> listaDatosAlumno = new List<Usuarios>();
            string mensaje = "";
            string ip = "";
            string link = "";
            string usuario="";
            string clave="";
            string tag = "";
            int idTipoRol = 0;
            if (this.IsValid)
            {
                if (txtUser.Text==string.Empty )
                {
                    txtUser.Focus();
                }
                else if (txtPassword.Text == string.Empty)
                {
                    txtPassword.Focus();
                }
                else if (ddlTipoUsuario.SelectedIndex == 0)
                {
                    ddlTipoUsuario.Focus();
                    ddlTipoUsuario.ForeColor = Color.Red;
                }
                else
                {
                    usuario = txtUser.Text.Replace(";", "").Replace("--", "");
                    clave = txtPassword.Text.Replace(";", "").Replace("--", "");
                    idTipoRol = int.Parse(ddlTipoUsuario.SelectedValue);
                    tag = ddlTipoUsuario.SelectedItem.Text;
                    ///Login Alumnos
                    if (ddlTipoUsuario.SelectedItem.Text == "Alumno")
                    {
                        try
                        {
                        
                        Usuarios oUsu = new Usuarios();
                        Espam.Idiomas.Decimo.Tesis.Negocio.WebServiceEspam.LoginEstudiante[] lista;
                        Logins oLogins = new Logins();
                        lista = oLogins.IngresoEstudiantes(usuario, clave, tag);
                        if (lista.Count() > 0)
                        {
                            Validaciones oValidaciones = new Validaciones();
                            int nivel = (int)lista[0].Semestre;
                            oUsu.semestre = oValidaciones.NivelAMatricular(nivel);
                            oUsu.carrera = lista[0].Carrera;
                            oUsu.documento = lista[0].Cedula;
                            listaDatosAlumno = oUsu.ConsultaAlumnoSiExiste();
                            if (listaDatosAlumno.Count()>0)
                            {
                                oUsu.UpdateSemestresAccesos(listaDatosAlumno.FirstOrDefault().idAlumno,nivel);
                                oUsu.UpdateNombresAccesos(listaDatosAlumno.FirstOrDefault().idAlumno,lista[0].Nombres,lista[0].Apellidos);

                                ListadoSemestres oSem = new ListadoSemestres();
                                oSem.idSemestre = (int)lista[0].Semestre;
                                string mensajeval = oSem.ValidaBloqueo();
                                if (mensajeval == "BLOQUEADO")
                                {
                                    lblValidaLogin.Text = "Estimados estudiantes no se les permitirá el ingreso por motivos administrativos";
                                    lblValidaLogin.Visible = true;
                                    lblValidaLogin.ForeColor = Color.Red;
                                    ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('Estimados estudiantes no se les permitirá el ingreso por motivos administrativos')", true);    
                                }
                                else
                                {
                                    VariablesDeSession(listaDatosAlumno);
                                }
                            }
                            else 
                            {
                                if (lista[0].Semestre == 0)
                                {
                                    lblValidaLogin.Text = "Estimados estudiantes de primer semestre nos se les permitirá inscribirse a los módulos de inglés hasta que se encuentre en segundo semestre por cuestiones administrativas";
                                    lblValidaLogin.Visible = true;
                                    lblValidaLogin.ForeColor = Color.Red;
                                    ScriptManager.RegisterStartupScript(this.Page, GetType(), "MostarMensaje", "mensajeMal('Estimados estudiantes de primer semestre nos se les permitirá inscribirse a los módulos de inglés hasta que se encuentre en segundo semestre por cuestiones administrativas')", true);    
                                }
                                else
                                {
                                    oUsu.nombres = lista[0].Nombres;
                                    oUsu.apellidos = lista[0].Apellidos;
                                    oUsu.documento = lista[0].Cedula;
                                    oUsu.estado = "Activo";
                                    oUsu.clave = clave;
                                    oUsu.cadenaPicPerfil = lista[0].Cedula;
                                    oUsu.idRol = int.Parse(ddlTipoUsuario.SelectedValue);
                                    nivel = (int)lista[0].Semestre;
                                    oUsu.semestre = oValidaciones.NivelAMatricular(nivel);
                                    oUsu.carrera = lista[0].Carrera;
                                    listaDatosAlumno = oUsu.RegistraUsuarioExistente();
                                    if (listaDatosAlumno.Count() > 0)
                                    {
                                        VariablesDeSession(listaDatosAlumno);
                                    }
                                }
                            }

                        }
                        else
                        {
                        }
                        }
                        catch (Exception)
                        {
                            Response.Redirect("UI_Login.aspx");
                        }
                     

                        ///fin catch
                    }
                    ///Login Docentes
                    else if (ddlTipoUsuario.SelectedItem.Text == "Docente")
                    {
                        Usuarios oUs = new Usuarios();
                        oUs.usuario = usuario;
                        oUs.clave = clave;
                        oUs.rol = tag;
                        listaDatosAlumno = oUs.LoginAdministradores(tag);
                        if (listaDatosAlumno.Count()>0)
                        {
                            VariablesDeSession(listaDatosAlumno);
                        }
                    }
                    ///Login Administradores
                    else if (ddlTipoUsuario.SelectedItem.Text=="Administradores")
                    {
                        Usuarios oUsuarios = new Usuarios();
                        oUsuarios.usuario = usuario;
                        oUsuarios.clave = clave;
                        oUsuarios.rol = tag;
                        listaDatosAlumno = oUsuarios.LoginAdministradores(tag);
                        if (listaDatosAlumno.Count()>0)
                        {
                            VariablesDeSession(listaDatosAlumno);
                        }
                    }
                    else if (ddlTipoUsuario.SelectedItem.Text == "Secretaria")
                    {
                        Usuarios oUsuarios = new Usuarios();
                        oUsuarios.usuario = usuario;
                        oUsuarios.clave = clave;
                        oUsuarios.rol = tag;
                        listaDatosAlumno = oUsuarios.LoginAdministradores(tag);
                        if (listaDatosAlumno.Count() > 0)
                        {
                            VariablesDeSession(listaDatosAlumno);
                        }
                    }
                    else
                    {}
                        Usuarios oUsuario = new Usuarios();

                            if (Session["userEspamIdiomasVarSession001"] != null && Session["passEspamIdiomasVarSession002"] != null && Session["rolEspamIdiomasVarSession003"] != null)
                            {
                                if (Session["rolEspamIdiomasVarSession003"].ToString() == "Alumno")
                                {
                                    Session["idAlumnoEspamIdiomasVarSession005"] = listaDatosAlumno[0].idAlumno;
                                    link = "UI_DashboardStudents.aspx";
                                }
                                else if (Session["rolEspamIdiomasVarSession003"].ToString() == "Docente")
                                {
                                    Session["idDocenteEspamIdiomasVarSession009"] = listaDatosAlumno[0].idDocente;
                                    link = "UI_DashboardTeacher.aspx";
                                }
                                else if (Session["rolEspamIdiomasVarSession003"].ToString() == "Administradores")
                                {
                                    Session["idAdminEspamIdiomasVarSession008"] = listaDatosAlumno[0].idAdmin;
                                    link = "Default.aspx";
                                }
                                else if (Session["rolEspamIdiomasVarSession003"].ToString() == "Secretaria")
                                {
                                    Session["idSecreEspamIdiomasVarSession010"] = listaDatosAlumno[0].idAdmin;
                                    link = "dashboardSecretaria.aspx";
                                }
                        try
                                {
                                    oUsuario.idUsuario = listaDatosAlumno[0].idUsuarioTipo;
                                    oUsuario.fechaEntrada = DateTime.Parse(DateTime.Today.ToShortDateString());
                                    oUsuario.horaEntrada = DateTime.Parse(DateTime.Now.ToShortTimeString());
                                    ip = HttpContext.Current.Request.UserHostAddress;

                                    if (ip == null || ip == string.Empty)
                                    {
                                        ip = "0:0:0:0";
                                    }
                                }
                                catch (Exception)
                                {
                                    ip = "0:0:0:0";
                                }
                                oUsuario.ip = ip;
                                mensaje = oUsuario.SaveAccesos();
                                Response.Redirect(link);
                               
                            }
                            else
                            {

                            }
                }
            }

            else
            {
                ActivaError();
                lblValidaLogin.Text = "Verifique Formulario";
            }
        }
        private void ActivaError()
        { 
            lblValidaLogin.Visible = true;
            lblValidaLogin.ForeColor = Color.Red;
        }
        private void VariablesDeSession(List<Usuarios> listaDatosAlumno)
        {
            Session["userEspamIdiomasVarSession001"] = listaDatosAlumno[0].usuario;
            Session["passEspamIdiomasVarSession002"] = listaDatosAlumno[0].clave;
            Session["rolEspamIdiomasVarSession003"] = listaDatosAlumno[0].rol;
            Session["idUsuEspamIdiomasVarSession004"] = listaDatosAlumno[0].idUsuario;
            Session["cadPicEspamIdiomasVarSession005"] = listaDatosAlumno[0].cadenaPicPerfil;
            Session["nameEspamIdiomasVarSession006"] = listaDatosAlumno[0].nombres;
            Session["lastNameEspamIdiomasVarSession005"] = listaDatosAlumno[0].apellidos;
            Session["idPersonaEspamIdiomasVarSession005"] = listaDatosAlumno[0].valorID;
            Session_Start();
           
            //CargarGramaticas();
        }
        protected void Session_Start()
        {
            //OnlineActiveUsers.OnlineUsersInstance.OnlineUsers.SetUserOnline(Session["nameEspamIdiomasVarSession006"].ToString());
            Global.totalNumberOfUsers += 1;
            Global.currentNumberOfUsers += 1;
        }
    }
}